#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;


//幸运的袋子
//所有球的号码的 和 大于所有球的号码的 积 
//dfs 
int dfs(vector<int>&nums,int curi,int sum,int mul)
{
    int count=0;
    for(int i=curi;i<nums.size();i++)
    {
        sum+=nums[i];
        mul*=nums[i];
        if(sum>mul)
        {
            count=count+1+dfs(nums,i+1,sum,mul);
        }
        else if(nums[i]==1) // 1 1 不是幸运袋子 但是 后续可能有其他非1值 
                            //就可以成为幸运的袋子
        {
            count+=dfs(nums,i+1,sum,mul);
        }
        else 
        {
            break;
        }
        sum-=nums[i];
        mul/=nums[i];

        //去重
        //走到这就证明当前不行了 把和他一样的值剪掉
        while(i<nums.size()-1 && nums[i]==nums[i+1]) i++;
    }
    return count;
}
int main()
{
    int n;
    cin>>n;
    vector<int>nums(n,0);
    for(int i=0;i<n;i++)
    {
        cin>>nums[i];
    }
    //排序 方便剪枝
    sort(nums.begin(),nums.end());
    cout<<dfs(nums,0,0,1)<<endl;
    return 0;
}

//计算日期到天数的转换
/*
#include <iostream>
#include <vector>
using namespace std;
int get_month_day(int n)
{
    int result=0;
    static int arr[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    for(int i=0;i<n;i++)
    {
        result+=arr[i];
    }
    return result;
}
int main()
{
    int year,month,day;
    cin>>year>>month>>day; 
    int result=get_month_day(month);
    if(month>2 && ((year%4==0 &&year%100!=0) || year%400==0))
    {
        result+=1;
    } 
    cout<<result+day<<endl;
    return 0;
}
*/